/**
 * 
 */
package com.cplsystems.incidencias.vm.personal.utils;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.zkoss.bind.BindUtils;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.Selectors;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zk.ui.select.annotation.WireVariable;
import org.zkoss.zk.ui.util.Clients;
import org.zkoss.zul.Window;

import com.cplsystems.incidencias.app.utils.IncidenciasUtils;
import com.cplsystems.incidencias.business.DatosGenerales;
import com.cplsystems.incidencias.services.DatosGeneralesService;

/**
 * @author César Palalía López (csr.plz@aisa-automation.com)
 * 
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class BuscarPersonalVM {

	@Wire("#buscarPersonal")
	private Window buscarPersonal;
	@WireVariable
	private DatosGeneralesService datosGeneralesService;

	private String nombre;
	private String apellidoPaterno;
	private String apellidoMaterno;

	private List<DatosGenerales> personal;
	private DatosGenerales personaSeleccionada;

	@Init
	public void init(@ContextParam(ContextType.VIEW) Component view) {
		Selectors.wireComponents(view, this, false);
		personal = new ArrayList<DatosGenerales>();
	}

	@Command
	@NotifyChange("personal")
	public void buscarPersona() {
		if (nombre != null) {
			if (apellidoPaterno != null) {
				personal = datosGeneralesService
						.findPersonaByNombreApellidosPaterno(nombre,
								apellidoPaterno);
			} else {
				personal = datosGeneralesService.findPersonaByNombre(nombre);
			}
		} else if (apellidoPaterno == null) {
			IncidenciasUtils
					.showMessage(
							"Por favor especifique un parámetro para realizar la búsqueda",
							Clients.NOTIFICATION_TYPE_WARNING, 4500);
		} else {
			personal = datosGeneralesService.findByApellidos(apellidoPaterno);
		}
	}

	@Command
	public void tranferirPersona() {
		if (personaSeleccionada == null) {
			IncidenciasUtils.showMessage(
					"Por favor seleccione un elemento antes de continuar",
					Clients.NOTIFICATION_TYPE_WARNING, 4500);
			return;
		}
		buscarPersonal.detach();
		Map<String, Object> args = new HashMap<String, Object>();
		args.put("personaSeleccionada", personaSeleccionada);
		BindUtils.postGlobalCommand(null, null, "loadDatosPersona", args);

	}

	@Command
	public void closeDialog() {
		if (buscarPersonal != null) {
			buscarPersonal.detach();
		}
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getApellidoPaterno() {
		return apellidoPaterno;
	}

	public void setApellidoPaterno(String apellidoPaterno) {
		this.apellidoPaterno = apellidoPaterno;
	}

	public String getApellidoMaterno() {
		return apellidoMaterno;
	}

	public void setApellidoMaterno(String apellidoMaterno) {
		this.apellidoMaterno = apellidoMaterno;
	}

	public List<DatosGenerales> getPersonal() {
		return personal;
	}

	public void setPersonal(List<DatosGenerales> personal) {
		this.personal = personal;
	}

	public DatosGenerales getPersonaSeleccionada() {
		return personaSeleccionada;
	}

	public void setPersonaSeleccionada(DatosGenerales personaSeleccionada) {
		this.personaSeleccionada = personaSeleccionada;
	}

}
